home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 16 / AMIGAplus Sonderheft 16 (1998)(ICP)(DE)[!].iso / pd / anwendungen / xpk_source / test / testmemexamine.c < prev    next >
C/C++ Source or Header  |  1998-08-27  |  3KB  |  132 lines

  1. #define NAME        "testMemExamine"
  2. #define DISTRIBUTION    "(Freeware) "
  3. #define REVISION    "3"
  4. #define SDI_ENDCODE_NOCTRLC
  5.  
  6. /* Programmheader
  7.  
  8.     Name:        testMemExamine
  9.     Author:        SDI
  10.     Distribution:    Freeware
  11.     Description:    tests Xpk Examine function
  12.     Compileropts:    -
  13.     Linkeropts:    -l xpkmaster
  14.  
  15.  1.1   06.12.96 : fixed for new includes, added new WriteXpkFib
  16.  1.2   15.04.97 : included WriteXpkFib.c
  17.  1.3   19.12.97 : added new flags
  18. */
  19.  
  20. #include <proto/exec.h>
  21. #include <proto/dos.h>
  22. #include <proto/xpkmaster.h>
  23. #include <exec/memory.h>
  24. #include "SDI_defines.h"
  25. #include "PrintFlags.c"
  26.  
  27. struct Library        *XpkBase        = 0;
  28. ULONG            DosVersion        = 37;
  29. STRPTR            buf            = 0;
  30. BPTR            fh            = 0;
  31. struct RDArgs        *rda            = 0;
  32. struct FileInfoBlock    *fib            = 0;
  33. struct XpkFib        *xfib            = 0;
  34.  
  35. #define PARAM "FILENAME/A"
  36.  
  37. void WriteXpkFib(struct XpkFib *xfib)
  38. {
  39.   STRPTR a = 0;
  40.  
  41.   switch(xfib->xf_Type)
  42.   {
  43.     case 0: a = "XPKTYPE_UNPACKED"; break;
  44.     case 1: a = "XPKTYPE_PACKED"; break;
  45.     case 2: a = "XPKTYPE_ARCHIVE"; break;
  46.   }
  47.  
  48.   if(a)
  49.     VPrintf("xf_Type      : %s\n", &a);
  50.   else
  51.     VPrintf("xf_Type      : %ld\n", &xfib->xf_Type);
  52.   VPrintf(
  53.     "xf_ULen      : %ld\n"
  54.     "xf_CLen      : %ld\n"
  55.     "xf_NLen      : %ld\n"
  56.     "xf_UCur      : %ld\n"
  57.     "xf_CCur      : %ld\n"
  58.     "xf_ID        : %lx", &xfib->xf_ULen);
  59.   a = (STRPTR) &xfib->xf_ID;
  60.   VPrintf(" (%.4s)\n", &a);
  61.   a = xfib->xf_Packer;
  62.   VPrintf(
  63.     "xf_Packer    : %s\n", &a);
  64.   VPrintf(
  65.     "xf_SubVersion: %d\n"
  66.     "xf_MasVersion: %d\n"
  67.     "xf_Flags     : ", &xfib->xf_SubVersion);
  68.   {
  69.     ULONG i = xfib->xf_Flags;
  70.     PrintFlag(&i, XPKFLAGS_PASSWORD, "XPKFLAGS_PASSWORD");
  71.     PrintFlag(&i, XPKFLAGS_KEY16,  "XPKFLAGS_KEY16");
  72.     PrintFlag(&i, XPKFLAGS_KEY32,  "XPKFLAGS_KEY32");
  73.     PrintFlag(&i, XPKFLAGS_NOSEEK, "XPKFLAGS_NOSEEK");
  74.     PrintFlag(&i, XPKFLAGS_NONSTD, "XPKFLAGS_NONSTD");
  75.     PrintEndFlag(i, xfib->xf_Flags);
  76.   }
  77.   VPrintf(
  78.     "xf_Head      : %04lx%04lx%04lx%04lx\n"
  79.     "xf_Ratio     : %ld\n", &xfib->xf_Head[0]);
  80. }
  81.  
  82. void main(void)
  83. {
  84.   UBYTE errbuf[XPKERRMSGSIZE+1];
  85.   STRPTR filename;
  86.  
  87.   if(!(rda = ReadArgs(PARAM, (LONG *) &filename, 0)) ||
  88.   !(xfib = (struct XpkFib *) AllocMem(sizeof(struct XpkFib), MEMF_ANY|MEMF_CLEAR)) ||
  89.   !(XpkBase = OpenLibrary(XPKNAME, 0)))
  90.     End(RETURN_FAIL);
  91.  
  92.   if(XpkExamineTags(xfib, XPK_InName, filename, XPK_GetError, errbuf,
  93.     TAG_DONE))
  94.   {
  95.     STRPTR a = errbuf;
  96.     VPrintf("Can't XpkExamine: %s\n", &a);
  97.     End(RETURN_FAIL);
  98.   }
  99.  
  100.   WriteXpkFib(xfib);
  101.  
  102.   if(!(fh = Open(filename, MODE_OLDFILE)) ||
  103.   !(fib = (struct FileInfoBlock *) AllocDosObject(DOS_FIB, 0)) ||
  104.   !(ExamineFH(fh, fib)) ||
  105.   !(buf = (STRPTR) AllocMem(fib->fib_Size, MEMF_ANY)) ||
  106.   Read(fh, buf, fib->fib_Size) != fib->fib_Size)
  107.     End(RETURN_FAIL);
  108.  
  109.   if(XpkExamineTags(xfib, XPK_InBuf, buf, XPK_InLen, fib->fib_Size,
  110.     XPK_GetError, errbuf, TAG_DONE))
  111.   {
  112.     STRPTR a = errbuf;
  113.     VPrintf("Can't XpkExamine: %s\n", &a);
  114.     End(RETURN_FAIL);
  115.   }
  116.     
  117.   WriteXpkFib(xfib);
  118.  
  119.   End(RETURN_OK);
  120. }
  121.  
  122. void end(void)
  123. {
  124.   if(fh)    Close(fh);
  125.   if(xfib)    FreeMem(xfib, sizeof(struct XpkFib));
  126.   if(buf)    FreeMem(buf, fib->fib_Size);
  127.   if(XpkBase)    CloseLibrary(XpkBase);
  128.   if(fib)    FreeDosObject(DOS_FIB, fib);
  129.   if(rda)    FreeArgs(rda);
  130. }
  131.  
  132.